#ifndef STATEMACHINE_H_
#define STATEMACHINE_H_

#include "Event_fwd.h"
#include "State.h"

namespace lib {

  class Context;

  class StateMachine {
  public:
    void         setContext(Context* context);
    void         setState(State::Code code);

    void         start();
    const State* getState() const;

    void handle(const E_Comein&        e);
    void handle(const E_Repair&        e);
    void handle(const E_Lend&          e);
    void handle(const E_Expire&        e);
    void handle(const E_Extend&        e);
    void handle(const E_Return&        e);
    void handle(const E_Reserve&       e);
    void handle(const E_Cancelreserve& e);
    void handle(const E_Repaired&      e);
    void handle(const E_Dispose&       e);

  private:
    Context*     context_;
    const State* state_;
  };

}

#endif

